home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 3: Developer Tools / Linux Cubed Series 3 - Developer Tools.iso / devel / lang / ada / gnat-3.05- / gnat-3 / gnat-3.05-i486-linux-elf-bin / features < prev    next >
Encoding:
Text File  |  1996-06-11  |  34.9 KB  |  834 lines

  1. GNAT IMPLEMENTED FEATURES LIST
  2. Current as of 05/17/96
  3.  
  4. Here is the list of implemented and not implemented features, including
  5. a full description of implementation-defined pragmas and attributes. For
  6. information on how to use GNAT, see gnatinfo.txt.
  7.  
  8. Latest features in GNAT version 3.05w
  9. =====================================
  10. Implement packing for bit field sizes up to 31 (major)
  11.  
  12. Latest features in GNAT version 3.04
  13. ====================================
  14.  
  15.    GNAT attributes mantissa, safe_small for fixed points
  16.    GNAT attribute small for floating point
  17.    These attributes correspond to attributes defined in Ada 83.
  18.  
  19.    gnatlink (new utility program)
  20.  
  21.    pragma Unchecked_Union is fully implemented (see end of this document)
  22.  
  23.    More efficient execution of programs containing exception handlers
  24.    (especially on Sun Sparc)
  25.  
  26.    Many new options to gnatmake: (see gnatinfo.txt for details)
  27.    -aI -aO, -jnum, -k, -l, -o
  28.  
  29.    New Source & Library search path switches: (see gnatinfo.txt for details)
  30.    -aLdir, -Adir, -aOdir, -aIdir, -Idir, -I-, -Ldir
  31.  
  32.    The DOS version has been migrated to DJGPP v2.
  33.    Tasking is now fully functional in the DOS version.
  34.    "Real" memory problems in the DOS version have been alleviated.
  35.  
  36.    New warnings for some infinite recursion cases
  37.  
  38.    When an Assert_Failure exception is raised, the exception is raised
  39.    with a message, either the file name and line number by default of
  40.    the pragma Assert, or the string explicitly supplied as the second
  41.    parameter.
  42.  
  43.    The restriction names No_GNAT_Attributes and No_GNAT_Pragmas have
  44.    been renamed No_Implementation_Attributes and No_Implementation_Pragmas.
  45.  
  46.    Record Representation Clauses which do not specify representations for
  47.    all components (partial rep clauses) are now accepted by GNAT.
  48.  
  49.    Packed arrays of records are now implemented.
  50.  
  51.    The Size attribute is now handled as specified in the RM. This means
  52.    that the value of 'Size will often be different from what it was
  53.    before and what it was in Ada 83. Two new attributes Object_Size
  54.    and Value_Size have been added to provide additional control.
  55.  
  56. Latest features in GNAT version 3.03
  57. ====================================
  58.  
  59.     Implement packing of multidimensional arrays
  60.  
  61.     Get_Immediate now follows the implementation advice and works as intended
  62.     (for SGI IRIX, Sparc SunOS/Solaris, Alpha OSF1, IBM OS/2 and Linux)
  63.  
  64.     The task attributes package is now fully functional
  65.  
  66.     Warnings for unset variables, and possible access before initialization
  67.  
  68.     pragma Warnings (On | Off) allows more detailed control of warnings
  69.     pragma Source_File_Name allows specifying non-standard file names
  70.     pragma No_Return allows specifying a procedure that never returns
  71.     pragma Attach_Handler    (implemented on Sparc SunOS and Sparc Solaris only)
  72.     pragma Interrupt_Handler (implemented on Sparc SunOS and Sparc Solaris only)
  73.  
  74. Latest features in GNAT version 3.01
  75. ====================================
  76.  
  77.     pragma Normalize_Scalars
  78.     Ada.Text_IO.Editing
  79.     Ada.Wide_Text_IO.Editing
  80.     Incomplete types declared in the private part that are
  81.      completed in the package body as unconstrained arrays.
  82.     Full implementation of stream attributes, including the
  83.      dispatching cases for class wide types.
  84.     Private protected operations
  85.     Pointers to unconstrained arrays may be double or single length. Double
  86.      ("fat") is the default size (e.g. 64 on SGI), but rep clauses or a
  87.      foreign convention will force them to single length.
  88.     Aggregates for composite Types with controlled components
  89.     Objects of type with unknown discriminants
  90.     pragma Queuing_Policy
  91.     pragma Source_File_Name (GNAT specific)
  92.     True multiprocessing on Sparc Solaris
  93.  
  94. Latest features in GNAT version 2.07
  95. ====================================
  96.  
  97.     Discriminant checks
  98.     Package Ada.Exceptions
  99.     External_Tag attribute
  100.     Identity attribute
  101.     Range Checks on the elaboration of a subtype_indication
  102.     Duration is an ordinary fixed-point type with delta of one nanosecond
  103.     Package Interfaces.COBOL
  104.     Protected subprogram pointers
  105.     Caller attribute
  106.     Restriction pragma
  107.     All restrictions in real time annex
  108.     All restrictions in safety and security annex
  109.     Higher resolution clocks for tasking on SunOS/Solaris
  110.  
  111. Latest features in GNAT version 2.06
  112. ====================================
  113.  
  114.     Requeue Statement involving task entries
  115.     inter-unit inlining (enabled by -O2 -gnatn)
  116.     aggregates for simple controlled types
  117.  
  118. Latest features in GNAT version 2.05
  119. ====================================
  120.  
  121.     Elaboration Checks
  122.     A new switch -gnati8 specifies the use of IBM PC Code Page 850 for
  123.      the identifier character set (this is Latin-1 a la IBM PC)
  124.     Protected entry families
  125.     Ada.Synchronous_Task_Control
  126.     Attribute Storage_Pool
  127.     Packed arrays (including packed boolean arrays)
  128.     Accessibility checks
  129.     -I for specifying source and object path (see gnatinfo.txt for details)
  130.     Conditional protected entry calls
  131.     Delay until inside select statements
  132.  
  133. Latest features in GNAT version 2.04
  134. ====================================
  135.  
  136.     GNATMAKE utility (see gnatinfo.txt for details)
  137.     Pragma Export
  138.     Ada.Streams.Stream_IO
  139.     Attribute Definite
  140.     Interrupt entries
  141.     Input-Output for Modular Types
  142.     Input-Output for Decimal Types
  143.     Input-Output for Integer for type Long_Long_Integer.
  144.     The following are now implemented in package Ada.Text_IO
  145.       Flush
  146.       Look_Ahead
  147.       Get_Immediate
  148.     Text_IO.Complex_IO
  149.     Text_IO.Text_Streams
  150.     Wide_Text_IO
  151.     Wide_Text_IO.Complex_IO
  152.     Wide_Text_IO.Text_Streams
  153.  
  154.     Note: All the I/O packages have been rewritten from the
  155.     ground up for this release, and should completely implement all
  156.     features of the RM. To get file sharing, allowed only if the
  157.     files are for the same I/O package and same mode, use a form
  158.     parameter shared=yes.
  159.  
  160. Status of Features
  161.  
  162.   This list applies to the ports for the following targets:
  163.  
  164.    SGI IRIX 5.2
  165.    Sun Sparc (SunOS 4.1 and Solaris 2.3),
  166.    x86 running IBM OS/2, Linux
  167.  
  168.   Other targets are generally complete except that no tasking constructs
  169.   are implemented.
  170.  
  171. ==========================================================
  172. = All of Ada 83 is implemented EXCEPT for the following: =
  173. ==========================================================
  174.  
  175.    Stack overflow checking is implemented only on the SGI machines
  176.  
  177. =========================================================================
  178. = All of Ada 95 implemented EXCEPT the following unimplemented features =
  179. =========================================================================
  180.  
  181.   CORE
  182.     (fully implemented)
  183.  
  184.   ANNEX A. PREDEFINED LANGUAGE ENVIRONMENT
  185.     Ada.Interrupts (implemented on Sparc SunOS and Sparc Solaris only)
  186.  
  187.   ANNEX B. INTERFACING TO OTHER LANGUAGES
  188.     (fully implemented)
  189.  
  190.   ANNEX C. SYSTEMS PROGRAMMING
  191.     Machine intrinsic subprograms
  192.     Interrupt support (implemented on Sparc SunOS and Sparc Solaris only)
  193.     Ada.Interrupts (implemented on Sparc SunOS and Sparc Solaris only)
  194.     Record rep clauses require full specification
  195.  
  196.   ANNEX D. REAL-TIME SYSTEMS
  197.     (fully implemented)
  198.  
  199.   ANNEX E. DISTRIBUTED SYSTEMS
  200.     (fully implemented)
  201.     (this refers to the compiler part, stub generation and the pragmas)
  202.  
  203.   ANNEX F. INFORMATION SYSTEMS
  204.     (fully implemented)
  205.  
  206.   ANNEX G. NUMERICS
  207.     Accuracy requirements for floating-point and complex not fully met
  208.  
  209.   ANNEX H. SAFETY AND SECURITY
  210.     (fully implemented)
  211.  
  212.   ANNEX I. OBSOLESCENT FEATURES
  213.     (fully implemented)
  214.  
  215.   ANNEX J. LANGUAGE-DEFINED ATTRIBUTES
  216.     (fully implemented)
  217.  
  218.   ANNEX K. LANGUAGE DEFINED PRAGMAS
  219.     Attach_Handler (implemented on Sparc SunOS and Sparc Solaris only)
  220.     Interrupt_Handler (implemented on Sparc SunOS and Sparc Solaris only)
  221.  
  222. ================================
  223. = Description of GNAT Pragmas ==
  224. ================================
  225.  
  226.   pragma Abort_Defer;
  227.   
  228.     This pragma is implementation (GNAT) defined. It must appear at
  229.     the start of the statement sequence of a handled sequence of
  230.     statements (right after the begin). It has the effect of deferring
  231.     aborts for the sequence of statements (but not for the declarations
  232.     or handlers, if any, associated with this statement sequence). The
  233.     exception case is handled correctly, i.e. if the statement sequence
  234.     propagates an exception, then abort is properly undeferred.
  235.   
  236.   pragma Ada_83;
  237.   
  238.     This pragma is implementation (GNAT) defined. It establishes Ada 83
  239.     mode for following text, regardless of the mode set by the command
  240.     line switches. Note that this is not a configuration pragma, so it
  241.     must be given separately for each unit to which it applies.
  242.   
  243.   pragma Ada_95;
  244.   
  245.     This pragma is implementation (GNAT) defined. It establishes Ada 95
  246.     mode for following text, regardless of the mode set by the command
  247.     line switches. Note that this is not a configuration pragma, so it
  248.     must be given separately for each unit to which it applies.
  249.   
  250.     Note: Ada 95 mode is set automatically for predefined language
  251.     units, including children of GNAT, so need not be given for any
  252.     such units.
  253.   
  254.   pragma Annotate (IDENTIFIER {, ARG});
  255.   ARG ::= NAME | EXPRESSION
  256.   
  257.     This pragma is an implementation (GNAT) defined pragma used to
  258.     annotate programs. The first argument is simply an identifier
  259.     that identifies the type of annotation. GNAT verifies that this
  260.     is an identifier, but does not otherwise analyze it. The arguments
  261.     following this identifier are analyzed as follows:
  262.   
  263.       String literals are assumed to be of type Standard.String
  264.       Names of entities are simply analyzed as entity names
  265.       All other expressions are analyzed as expressions, and must
  266.        be unambiguous
  267.   
  268.    The analyzed pragma is retained in the tree, but not otherwise
  269.    processed by any part of the GNAT compiler. This pragma is intended
  270.    for use by external tools.
  271.   
  272.   pragma Assert (Boolean_EXPRESSION [,static_string_EXPRESSION]);
  273.   
  274.     This pragma is implementation (GNAT) defined. Its effect depends
  275.     on whether the corresponding command line switch is set to activate
  276.     assertions. If assertions are inactive, the pragma has no effect.
  277.     If asserts are enabled, then the semantics of the pragma is exactly
  278.     equivalent to:
  279.   
  280.       if not Boolean_EXPRESSION then
  281.          System.Assertions.Raise_Assert_Failure (string_EXPRESSION);
  282.       end if;
  283.   
  284.     The effect of the call is to raise System.Assertions.Assert_Failure.
  285.     The string argument, if given, is the message associated with the
  286.     exception occurrence. If no second argument is given, the default
  287.     message is "file:nnn", where file is the name of the source file
  288.     containing the assert, and nnn is the line number of the assert.
  289.   
  290.     Note: a pragma is not a statement, so if a statement sequence
  291.     contains nothing but a pragma assert, then a null statement is
  292.     required in addition, as in:
  293.   
  294.        ...
  295.        if J > 3 then
  296.           pragma (Assert (K > 3, "Bad value for K"));
  297.           null;
  298.        end if;
  299.   
  300.     Note: if the boolean expression has side effects, then these side
  301.     effects will turn on and off with the setting of the assertions mode,
  302.     resulting in assertions that have an effect on the program. This
  303.     should generally be avoided.
  304.   
  305.   pragma CPP_Class ([Entity =>] LOCAL_NAME)
  306.   
  307.     The argument denotes an entity in the current declarative region
  308.     that is declared as a tagged or untagged record type. It indicates
  309.     that the type corresponds to an externally declared C++ class type,
  310.     and is to be layed out the same way that C++ would lay out the type.
  311.     If (and only if) the type is tagged, at least one component in the
  312.     record must be of type Interfaces.CPP.Vtable_Ptr, corresponding to
  313.     the C++ Vtable (or Vtables in the case of multiple inheritance)
  314.     used for dispatching.
  315.   
  316.     Types for which CPP_Class is defined do not have assignment or
  317.     equality operators defined (such operations can be imported or
  318.     declared as subprograms as required). Initialization is allowed
  319.     only by constructor functions (see pragma CPP_Constructor).
  320.   
  321.   pragma CPP_Constructor ([Entity =>] LOCAL_NAME);
  322.   
  323.     This pragma identifies an imported function (imported in the usual
  324.     way with pragma Import) as corresponding to a C++ constructor. The
  325.     identified function must be previously mentioned in a pragma Import
  326.     with convention C++, and must be of one of the following forms:
  327.   
  328.       function Fname return T'Class;
  329.       function Fname (<parameters>) return T'Class;
  330.   
  331.     where T is a tagged type to which the pragma CPP_Class applies.
  332.   
  333.     The first form is the default constructor, used when an object
  334.     of type T is created on the Ada side with no explicit constructor.
  335.     Other constructors (including the copy constructor, which is simply
  336.     a special case of the second form in which the one and only argument
  337.     is of type T), can only appear in two contexts:
  338.   
  339.       On the right side of an initialization of an object of type T
  340.       In an extension aggregate for an object of a type derived from T
  341.   
  342.     Note that although the constructor is described as a function that
  343.     returns a value on the Ada side, it is typically a procedure with
  344.     an extra implicit argument (the object being initialized) at the
  345.     implementation level. GNAT takes care of issuing the appropriate
  346.     call, whatever it is, to get the object properly initialized.
  347.   
  348.     Note: in the case of derived objects, there are two possible forms
  349.     for declaring and creating an object:
  350.   
  351.       New_Object : Derived_T;
  352.       New_Object : Derived_T := (constructor-function-call with ...);
  353.   
  354.     In the first case the default constructor is called, and extension
  355.     fields if any are initialized according to the default initialization
  356.     expressions in the Ada declaration. In the second case, the given
  357.     constructor is called, and the extension aggregate indicates the
  358.     explicit values of the extension fields.
  359.   
  360.     Note: if no constructors are imported then it is impossible to
  361.     create any objects on the Ada side. If no default constructor is
  362.     imported, then only the initialization forms using an explicit
  363.     call to a constructor are permitted.
  364.   
  365.   pragma CPP_Destructor ([Entity =>] LOCAL_NAME);
  366.   
  367.     This pragma identifies an imported procedure (imported in the usual
  368.     way with pragma Import) as corresponding to a C++ destructor. The
  369.     identified procedure must be previously mentioned in a pragma Import
  370.     with convention C++, and must be of the following forms:
  371.   
  372.       procedure Fname (obj : in out T'Class);
  373.   
  374.     where T is a tagged type to which the pragma CPP_Class applies.
  375.     This procedure will be called automaticlly on scope exit if any
  376.     objects of T are created on the Ada side.
  377.   
  378.   pragma CPP_Virtual
  379.       [Entity =>]       LOCAL_NAME
  380.     [ [Vtable_Ptr =>]   Component_NAME,
  381.       [Position =>]     static_integer_EXPRESSION]);
  382.   
  383.     This pragma serves the same function as pragma Import for the case
  384.     of a virtual function that is imported from C++. Entity must refer
  385.     to a primitive subprogram of a tagged type to which pragma CPP_Class
  386.     applies. Vtable_Ptr specifies the Vtable_Ptr component which contains
  387.     the entry for this virtual function, and Position is the sequential
  388.     number counting virtual functions for this Vtable starting at 1.
  389.   
  390.     The Vtable_Ptr and Position arguments may be omitted if there is
  391.     one Vtable_Ptr present (single inheritance case), and all virtual
  392.     functions are imported, since then the compiler can deduce both
  393.     these values.
  394.   
  395.     Note that no External_Name or Link_Name arguments are required for
  396.     a virtual function, since it is always accessed indirectly via the
  397.     appropriate Vtable entry.
  398.   
  399.   pragma CPP_Vtable (
  400.     [Entity =>]       LOCAL_NAME
  401.     [Vtable_Ptr =>]   Component_NAME,
  402.     [Entry_Count =>]  static_integer_EXPRESSION);
  403.   
  404.     One CPP_Vtable pragma can be present for each component of type
  405.     CPP.Interfaces.Vtable_Ptr in a record to which pragma CPP_Class
  406.     applies. Entity is the tagged type, Vtable_Ptr is the record field
  407.     of type Vtable_Ptr, and Entry_Count is the number of virtual
  408.     functions on the C++ side (not all of which need to be imported
  409.     on the Ada side).
  410.   
  411.     It is permissible to omit the CPP_Vtable pragma if there is only
  412.     one Vtable_Ptr component in the record, and all virtual functions
  413.     are imported on the Ada side (the default value for the entry count
  414.     in this case is simply the total number of virtual functions).
  415.   
  416.   pragma Debug (PROCEDURE_CALL_STATEMENT);
  417.   
  418.     This pragma is implementation (GNAT) defined. Its effect depends
  419.     on the setting of the Assertions_Enabled flag in Opt. If this
  420.     flag is off (False), then the pragma has no effect. If the flag
  421.     is on (True), then the semantics of the pragma is equivalent to
  422.     the procedure call.
  423.   
  424.   pragma Error_Monitoring (On | Off, STRING_LITERAL)
  425.   
  426.     This pragma is implementation (GNAT) defined. It is used to bracket
  427.     a section of code, using one pragma with argument ON to start the
  428.     section, and another with argument OFF to end the section. Within
  429.     the monitored section of code, any error message issued will be
  430.     considered a warning from the point of view of the return code
  431.     issued by the compilation. Furthermore at least one such error
  432.     must occur within each monitored region. If no error occurs, a
  433.     fatal (non-warning) message is issued. The use of the pragma
  434.     Error_Monitoring causes code generation to be turned off (since
  435.     there really are errors in the program).
  436.   
  437.     If a second argument is given, then there is an additional check
  438.     that the first error issued in the monitored region exactly matches
  439.     the characters given in the string literal. The second argument is
  440.     only relevant for the ON case, it is ignored for the OFF case.
  441.   
  442.     This pragma is provided to allow easy automation of error message
  443.     generation, e.g. in ACVC B tests, and is primarily intended for
  444.     compiler testing purposes.
  445.   
  446.   pragma Inline_Generic (generic_package_NAME)
  447.     This is implemented for compatibility with Dec, and is recognized,
  448.     but otherwise ignored by GNAT.
  449.   
  450.   pragma Interface_Name (
  451.       [Entity =>]         LOCAL_NAME
  452.     [,[External_Name =>]  static_string_EXPRESSION]]
  453.     [,[Link_Name =>]      static_string_EXPRESSION]] );
  454.   
  455.     This pragma is implementation (GNAT) defined. It is an alternative
  456.     way of specifying the interface name for an interfaced subprogram,
  457.     and is provided for compatibility with Ada 83 compilers that use
  458.     the pragma for this purpose. At least one of the arguments external
  459.     name or link name must be present.
  460.   
  461.   pragma Machine_Attribute (
  462.       [Attribute_Name =>] static_string_EXPRESSION
  463.      ,[Entity =>]         LOCAL_NAME );
  464.   
  465.     This pragma is implementation (GNAT) defined. Machine dependent
  466.     attributes can be specified for types and/or declarations. Currently
  467.     only subprogram entities are supported. This pragma is semantically
  468.     equivalent to __attribute__(( <Attribute_Name> )) in Gnu C, where
  469.     <Attribute_Name> is recognized by the Gnu C macros:
  470.   
  471.        VALID_MACHINE_TYPE_ATTRIBUTE
  472.        VALID_MACHINE_DECL_ATTRIBUTE,
  473.   
  474.     which are defined in the configuration header file tm.h.  Further
  475.     documentation can be found in the gcc distribution document: tm.texi.
  476.   
  477.   pragma No_Return (procedure_LOCAL_NAME);
  478.   
  479.     The given name must refer to one or more procedure declarations
  480.     in the current declarative part. A procedure to which this pragma
  481.     is applied may not contain any explicit return statements, and
  482.     also may not contain any implicit return statements from falling
  483.     off the end of a statement sequence. One use of this pragma is to
  484.     identify procedures whose only purpose is to raise an exception.
  485.   
  486.     One use of this pragma is to suppress incorrect warnings about
  487.     missing returns in functions, where the last statement of a
  488.     function statement sequence is a call to such a procedure.
  489.   
  490.   pragma Share_Generic (generic_package_NAME)
  491.   
  492.     This is implemented for compatibility with Dec, and is recognized,
  493.     but otherwise ignored by GNAT.
  494.   
  495.   pragma Source_File_Name (
  496.     [UNIT_NAME =>] unit_NAME,
  497.     [BODY_FILE_NAME | SPEC_FILE_NAME] => STRING_LITERAL)
  498.   
  499.     The source file name pragma allows a program to override the normal
  500.     naming convention. It is a configuration pragma, and so has the usual
  501.     applicability of configuration pragmas (i.e. it applies to either an
  502.     entire partition, or to all units in a compilation, or to a single
  503.     unit, depending on how it is used. The form of the pragma is:
  504.   
  505.     The given unit name is mapped to the given file name. The identifier
  506.     for the second argument is required, and indicates whether this is
  507.     the file name for the spec or for the body.
  508.   
  509.   pragma Source_Reference (INTEGER_LITERAL [, STRING_LITERAL]);
  510.   
  511.     This pragma is implementation (GNAT) defined. It typically appears
  512.     as the first line of a source file. The integer value is the logical
  513.     line number of the line following the pragma line (for use in error
  514.     messages and debugging information). The second argument is a static
  515.     string constant that specifies the file name to be used in error
  516.     messages and debugging information. This is most notably used for
  517.     the output of gnatchop with the -r switch, to make sure that the
  518.     original unchopped source file is the one referred to.
  519.   
  520.     Note: the second argument must be a string literal, it cannot be
  521.     a static string expression other than a string literal. This is
  522.     because its value is needed for error messages issued by all phases
  523.     of the compiler.
  524.   
  525.   pragma Subtitle (...)
  526.     Recognized but ignored
  527.   
  528.   pragma Task_Info (task_info_EXPRESSION)
  529.     This pragma appears within a task definition (like pragma Priority)
  530.     and applies to the task in which it appears. The argument must be
  531.     of type System.Task_Info.Task_Info_Type.
  532.   
  533.   pragma Title (...)
  534.     Recognized but ignored
  535.   
  536.   pragma Unchecked_Union (first_subtype_LOCAL_NAME)
  537.     This pragma is implementation (GNAT) defined. It is used to declare
  538.     that the named type should be equivalent to a C union type, and is
  539.     intended only for use in interfacing with C code that uses union
  540.     types. In Ada terms, the named type must obey the following rules:
  541.   
  542.        It is a non-tagged non-limited record type
  543.        It has a single discrete discriminant with a default value
  544.        Pragma Suppress (Discriminant_Check) applies implicitly
  545.        The component list consists of a single variant part
  546.        The default convention is C
  547.        Each variant has a component list with a single component
  548.        No nested variants are allowed
  549.        No component can have an explicit default value
  550.        No component can have a non-static constraint
  551.   
  552.     In addition, given a type that meets the above requirements, the
  553.     following restrictions apply to its use throughout the program:
  554.   
  555.        The discriminant name can be mentioned only in an aggregate
  556.        No subtypes may be created of this type
  557.        The type may not be constrained by giving a discriminant value
  558.        An unchecked union type cannot be passed as the actual for a
  559.         generic formal with a discriminant.
  560.   
  561.     Also, equality and inequality operations on unchecked_unions are not
  562.     available, since there is no discriminant to compare, and in general
  563.     the compiler does not even know how many bits to compare. It is
  564.     implementation dependent whether this is detected at compile time
  565.     as an illegality, or whether it is undetected and considered to be
  566.     an erroneous construct. In GNAT, a direct comparison is illegal,
  567.     but GNAT does not attempt to catch the composite case (where two
  568.     composites are compared that contain an unchecked union component),
  569.     so such comparisons are simply considered erroneous.
  570.   
  571.     The layout of the resulting type corresponds exactly to a C union,
  572.     where each branch of the union corresponds to a single variant in
  573.     the Ada record. The semantics of the Ada program is not changed in
  574.     any way by the pragma, i.e. provided the above restrictions are
  575.     followed, and no erroneous incorrect references to fields or
  576.     erroneous comparisons occur, the semantics is exactly as described
  577.     by the Ada reference manual.
  578.   
  579.   pragma Unimplemented_Unit;
  580.   
  581.     This pragma is implementation (GNAT) defined. If it occurs in a
  582.     unit that is processed by the compiler, the compilation is aborted
  583.     with the message xxx not implemented, where xxx is the name of
  584.     the current compilation unit followed by a compiler abort. This
  585.     pragma is intended to allow the compiler to handle unimplemented
  586.     library units in a clean manner.
  587.   
  588.     The abort only hapens if code is being generated. This allows the
  589.     use of specs of unimplemented packages in syntax or semantic
  590.     checking mode.
  591.   
  592.   pragma Unsuppress (IDENTIFIER [, [On =>] NAME]);
  593.   
  594.     This pragma is an implementation (GNAT) defined configuration pragma.
  595.     It undoes the effect of a previous pragma Suppress. If there is no
  596.     corresponding pragma Suppress in effect, then it has no effect. The
  597.     range of the effect is the same as for pragma Suppress. The meaning
  598.     of the arguments is identical to that used in pragma Suppress.
  599.   
  600.     One important application is to ensure that checks are on in cases
  601.     where code depends on the checks for its correct functioning, so
  602.     that the code will compile correctly even if the compiler switches
  603.     are set to suppress checks.
  604.   
  605.   Pragma Warnings (On | Off, [LOCAL_NAME]);
  606.   
  607.     Normally warnings are enabled, with the output being controlled by
  608.     the command line switch. Warnings (Off) turns off generation of
  609.     warnings until a Warnings (On) is encountered or the end of the
  610.     current unit. If generation of warnings is turned off using this
  611.     pragma, then no warning messages are output, regardless of the
  612.     setting of the command line switches.
  613.   
  614.     The form with a single argument is a configuration pragma.
  615.   
  616.     If a second parameter is present, then warnings are suppressed for
  617.     the particular entity named in the pragma. This suppression is
  618.     effective from the point where it occurs till the end of the
  619.     extended scope of the variable (similar to the scope of Suppress).
  620.  
  621. ==========================================
  622. = Description of GNAT-defined Attributes =
  623. ==========================================
  624.  
  625.   Abort_Signal 
  626.    
  627.     Standard'Abort_Signal (Standard is the only allowed prefix)
  628.     provides the entity for the special exception used to signal
  629.     task abort or asynchronous transfer of control. Normally this
  630.     attribute should only be used in the tasking runtime (it is
  631.     highly peculiar, and completely outside the normal semantics
  632.     of Ada, for a user program to intercept the abort exception).
  633.    
  634.   Address_Size 
  635.    
  636.     Standard'Address_Size (Standard is the only allowed prefix) is
  637.     a static constant giving the number of bits in an Address. It
  638.     is used primarily for constructing the definition of Memory_Size
  639.     in package Standard, but may be freely used in user programs.
  640.     This is a static attribute.
  641.    
  642.   Default_Bit_Order 
  643.    
  644.     Standard'Default_Bit_Order (Standard is the only permissible prefix),
  645.     provides the value System.Default_Bit_Order as a Pos value (0 for
  646.     High_Order_First, 1 for Low_Order_First). This is used to construct
  647.     the definition of Default_Bit_Order in package System. This is a
  648.     static attribute.
  649.    
  650.   Elab_Body 
  651.    
  652.     This attribute can only be applied to a program unit name. It
  653.     returns the entity for the corresponding elaboration procedure
  654.     for elaborating the body of the referenced unit. This is used
  655.     in the main generated elaboration procedure by the binder, and
  656.     is not normally used in any other context, but there may be
  657.     specialized situations in which it is useful to be able to
  658.     call this elaboration procedure from Ada code, e.g. if it
  659.     is necessary to do selective reelaboration to fix some error.
  660.    
  661.   Elab_Spec 
  662.    
  663.     This attribute can only be applied to a program unit name. It
  664.     returns the entity for the corresponding elaboration procedure
  665.     for elaborating the spec of the referenced unit. This is used
  666.     in the main generated elaboration procedure by the binder, and
  667.     is not normally used in any other context, but there may be
  668.     specialized situations in which it is useful to be able to
  669.     call this elaboration procedure from Ada code, e.g. if it
  670.     is necessary to do selective reelaboration to fix some error.
  671.    
  672.   Enum_Rep 
  673.    
  674.     For every enumeration subtype S, S'Enum_Rep denotes a function
  675.     with the following specification:
  676.    
  677.       function S'Enum_Rep (Arg : S'Base) return universal_integer;
  678.    
  679.     The function returns the representation value for the given
  680.     enumeration value. This will be equal to the 'Pos value in the
  681.     absence of an enumeration representation clause. This is a static
  682.     attribute (i.e. the result is static if the argument is static).
  683.    
  684.   Fixed_Value 
  685.    
  686.     For every fixed-point type S, S'Fixed_Value denotes a function
  687.     with the following specification:
  688.    
  689.       function S'Fixed_Value (Arg : universal_integer) return S;
  690.    
  691.     The value returned is the fixed-point value V such that
  692.    
  693.       V = Arg * S'Small
  694.    
  695.     The effect is thus equivalent to first converting the argument
  696.     to the integer type used to represent S, and then doing an
  697.     unchecked conversion to the fixed-point type. This attribute is
  698.     primarily intended for use in implementation of the input-output
  699.     functions for fixed-point values.
  700.    
  701.   Img 
  702.    
  703.     The 'Img function is defined for any prefix, P, that denotes an
  704.     object of scalar type T. P'Img is equivalent to T'Image (P). This
  705.     is convenient for debugging. For example:
  706.    
  707.        Put_Line ("X = " & X'Img);
  708.    
  709.     has the same meaning as the more verbose:
  710.    
  711.        Put_Line ("X = " & Temperature_Type'Image (X));
  712.    
  713.     where Temperature_Type is the subtype of the object X.
  714.    
  715.   Integer_Value 
  716.    
  717.     For every integer type S, S'Integer_Value denotes a function
  718.     with the following specification:
  719.    
  720.       function S'Integer_Value (Arg : universal_fixed) return S;
  721.    
  722.     The value returned is the integer value V, such that
  723.    
  724.       Arg = V * fixed-type'Small
  725.    
  726.     The effect is thus equivalent to first doing an unchecked convert
  727.     from the fixed-point type to its corresponding implementation type,
  728.     and then converting the result to the target integer type. This
  729.     attribute is primarily intended for use in implementation of the
  730.     standard input-output functions for fixed-point values.
  731.    
  732.   Max_Interrupt_Priority 
  733.    
  734.     Standard'Max_Interrupt_Priority (Standard is the only permissible
  735.     prefix), provides the value System.Max_Interrupt_Priority, and is
  736.     intended primarily for constructing this definition in package
  737.     System (see note above in Default_Bit_Order description}. This
  738.     is a static attribute.
  739.    
  740.   Max_Priority 
  741.    
  742.     Standard'Max_Priority (Standard is the only permissible prefix)
  743.     provides the value System.Max_Priority, and is intended primarily
  744.     for constructing this definition in package System (see note above
  745.     in Default_Bit_Order description). This is a static attribute.
  746.    
  747.   Maximum_Alignment 
  748.    
  749.     Standard'Maximum_Alignment (Standard is the only permissible prefix)
  750.     provides the maximum useful alignment value for the target. This
  751.     is a static value that can be used to specify the alignment for an
  752.     object, guaranteeing that it is properly aligned in all cases. The
  753.     time this is useful is when an external object is imported and its
  754.     alignment requirements are unknown. This is a static attribute.
  755.  
  756.   Object_Size
  757.  
  758.     Type'Object_Size is the same as Type'Size for all types except
  759.     fixed-point types and discrete types. For fixed-point types and
  760.     discrete types, this attribute gives the size used for default
  761.     allocation of objects and components of the size. It may be set
  762.     for any subtype (even a non-first subtype). See section on Size
  763.     handling for further details.
  764.    
  765.   Passed_By_Reference 
  766.    
  767.     T'Passed_By_Reference for any subtype T returns a boolean value
  768.     that is true if the type is normally passed by reference and
  769.     false if the type is normally passed by copy in calls. For scalar
  770.     types, the result is always False and is static. For non-scalar
  771.     types, the result is non-static (since it is computed by Gigi).
  772.    
  773.   Range_Length 
  774.    
  775.     T'Range_Length for any discrete type T yields the number of
  776.     values represented by the subtype (zero for a null range). The
  777.     result is static for static subtypes. Note that Range_Length
  778.     applied to the index subtype of a one dimensional array always
  779.     gives the same result as Range applied to the array itself.
  780.    
  781.   Storage_Unit 
  782.    
  783.     Standard'Storage_Unit (Standard is the only permissible prefix)
  784.     provides the value System.Storage_Unit, and is intended primarily
  785.     for constructing this definition in package System (see note above
  786.     in Default_Bit_Order description). The is a static attribute.
  787.    
  788.   Tick 
  789.    
  790.     Standard'Tick (Standard is the only permissible prefix) provides
  791.     the value System.Tick, and is intended primarily for constructing
  792.     this definition in package System (see note above in description
  793.     of Default_Bit_Order). This is a static attribute.
  794.    
  795.   Universal_Literal_String 
  796.    
  797.     The prefix of 'Universal_Literal_String must be a named number.
  798.     The static result is the string consisting of the characters of
  799.     the number as defined in the original source. This allows the
  800.     user program to access the actual text of named numbers without
  801.     intermediate conversions and without the need to enclose the
  802.     strings in quotes (which would preclude their use as numbers).
  803.     This is used internally for the construction of values of the
  804.     floating-point attributes from the file ttypef.ads, but may
  805.     also be used by user programs.
  806.    
  807.   Unrestricted_Access 
  808.    
  809.     The Unrestricted_Access attribute is similar to Access except that
  810.     all accessibility and aliased view checks are omitted. This is very
  811.     much a user-beware attribute. Basically its status is very similar
  812.     to Address, for which it is a desirable replacement where the value
  813.     desired is an access type. In other words, its effect is identical
  814.     to first taking 'Address and then doing an unchecked conversion to
  815.     a desired access type. Note that in GNAT, but not necessarily in
  816.     other implementations, the use of static chains for inner level
  817.     subprograms means that Unrestricted_Access applied to a subprogram
  818.     yields a value that can be called as long as the subprogram is in
  819.     scope (normal Ada 95 accessibility rules restrict this usage).
  820.  
  821.   Value_Size
  822.  
  823.     Type'Value_Size is the number of bits required to represent a
  824.     value of the given subtype. It is the same as Type'Size, but,
  825.     unlike Size, may be set for non-first subtypes. See section
  826.     on Size handling for further details.
  827.    
  828.   Word_Size 
  829.    
  830.     Standard'Word_Size (Standard is the only permissible prefix)
  831.     provides the value System.Word_Size, and is intended primarily
  832.     for constructing this definition in package System (see note above
  833.     in Default_Bit_Order description). This is a static attribute.
  834.